import BASE_URL from '@/api/env';
import uploadFile from '@/api/upload';

/**
 * @exports
 * 全局工具类
 */
let utils = {}

/**
 * 显示消息提示框
 * @param { String } title 提示的内容，长度与 icon 取值有关。
 * @param { String } position 纯文本轻提示显示位置
 * @param { String } icon 图标，有效值详见uniapp官方说明。
 * @param { Number } duration 提示的延迟时间，单位毫秒，默认：1500
 * @param { Boolean } mask 防止触摸穿透
 * @example this.$utils.toast(title);
 */
utils.toast = function (title, position = 'bottom', icon = 'none', duration = 1500, mask = false) {
	uni.showToast({
		title,
		position,
		icon,
		duration,
		mask
	});
}

/**
 * 显示 loading 提示框, 需主动调用
 * @param { String } title 提示的文字内容，显示在loading的下方
 * @param { Boolean } mask 是否显示透明蒙层，防止触摸穿透默认 true
 * @example this.$utils.loading();
 */
utils.loading = function (title = '正在加载...', mask = true) {
	uni.showLoading({
		title,
		mask
	});
}

/**
 * 拨打电话
 * @param { String } phoneNumber 目标号码
 * @example this.$utils.makePhone(13311112222);
 */
utils.makePhone = function (phoneNumber) {
	uni.makePhoneCall({
		phoneNumber
	});
}

/**
 * 从底部向上弹出操作菜单
 * @param { Array } itemList 按钮的文字数组
 * @param { Function } callback 回调选择按钮的索引
 * @param { String } textColor 按钮的文字颜色
 * @example this.$utils.showActionSheet(['A','B','C'],index => console.log(index));
 */
utils.showActionSheet = function (itemList = [], callback, textColor = "#4F4F4F") {
	uni.showActionSheet({
		itemList,
		textColor,
		success: function (res) {
			callback(res.tapIndex);
		},
		fail: function (res) {
			console.error(res.errMsg);
		}
	});
}

/**
 * 根据网络状态提示信息
 * @example this.$utils.toastMsgByNetwork();
 */
utils.toastMsgByNetwork = function () {
	uni.getNetworkType({
		success (res) {
			switch (res.networkType) {
			  case 'wifi':
				this.toast('请求超时,可切换为4g试试哦~');
				break;
			  case '4g':
				this.toast('当前网络状态不佳,请稍后再试.');
				break;
			  case '3g':
				this.toast('当前处在3g状态,可切换为4g后再试试哦~');
				break;
			  case '2g':
				this.toast('当前处在2g状态,可切换为4g后再试试哦~');
				break;
			  case 'ethernet':
				this.toast('当前处在有线网络状态,可切换为4g后再试试哦~');
				break;
			  case 'unknown':
				this.toast('当前处在不知名网络状态,可切换为4g后再试试哦~');
				break;
			  case 'none':
				this.toast('网络走丢了哦~');
				break;
			  default:
				this.toast('接口请求超时间');
				break;
			}
		},
		fail (err) {
			this.toast('获取网络状态失败');
		}
	})
}

/**
 * upx2px
 * @example $utils.upx2px(20) => ≈ 10
 * @description 计算rpx转px
 */
utils.upx2px = function (num) {
	return uni.upx2px(num);
}

/**
 * 获取图片完整地址
 * @param src
 */
utils.getImgUrl = function (src) {
	if (src.startsWith('http://') || src.startsWith('https://')) {
		return src;
	} else if (src.startsWith('/')) {
		return BASE_URL + src;
	} else {
		return BASE_URL + '/' + src;
	}
}

/**
 * 设置剪切板内容
 * @param {*} text 
 */
utils.copy = function (text) {
	uni.setClipboardData({
		data: text,
		success: () => {
			uni.hideToast();
			this.toast("复制成功", 'center');
		},
		fail: () => {
			this.toast("复制失败", 'center');
			console.log(err);
		}
	});
}

/**
 * 封装图片上传
 * @param { Array } sourceType 是否使用相机
 * @param { Number } maxSize 当前图片的最大占用内存
 * @param { Function } callback 回调当前图片的本地路径
 * @returns { Promise }
 * @example this.$utils.chooseImage(['camera'],1,target => {});
 */
utils.chooseImage = function (sourceType = ['camera', 'album'], maxSize = 1, callback = null) {
	return new Promise(reslove => uni.chooseImage({
		count: 1,
		sourceType: sourceType,
		sizeType: ['original'],
		success: chooseImageRes => {
			const tempFilePaths = chooseImageRes.tempFilePaths;
			callback != null && callback(tempFilePaths[0]);
		},
		fail: errData => this.toast(errData)
	}))
}

export default utils;